"""
数据库操作模块

此模块提供失物招领系统数据库的各种操作函数，
包括数据库初始化、物品的增删改查、搜索和 HTML 格式化等功能。

主要功能：
- 初始化数据库表结构
- 添加、删除、查询物品记录
- 搜索物品（支持名称和备注模糊匹配）
- 将物品列表格式化为 HTML 表格显示

依赖模块：
- sqlite3: SQLite 数据库操作
- base64: 图片数据编码
"""

import sqlite3
import base64


def init_db():
    """
    初始化数据库表结构

    创建名为 'items' 的 SQLite 表（如果不存在），包含以下字段：
    - id: 主键，自增整数
    - image: 图片二进制数据
    - name: 物品名称
    - location: 放置地点
    - note: 备注信息

    数据库文件：lost_and_found.db
    """
    conn = sqlite3.connect('lost_and_found.db')
    cursor = conn.cursor()
    cursor.execute('''CREATE TABLE IF NOT EXISTS items 
                      (id INTEGER PRIMARY KEY AUTOINCREMENT, 
                       image BLOB, 
                       name TEXT,
                       location TEXT,
                       note TEXT)''')
    conn.commit()
    conn.close()


def add_item(image_binary, name, location, note):
    """
    添加物品到数据库

    将新的失物信息插入到数据库的 items 表中。

    参数：
    image_binary (bytes): 物品图片的二进制数据
    name (str): 物品名称
    location (str): 物品放置地点
    note (str): 备注信息
    """
    conn = sqlite3.connect('lost_and_found.db')
    cursor = conn.cursor()
    cursor.execute("INSERT INTO items (image, name, location, note) VALUES (?,?,?,?)",
                   (image_binary, name, location, note))
    conn.commit()
    conn.close()


def search_items(query):
    """
    搜索物品

    根据查询关键词在物品名称和备注中进行模糊搜索（不区分大小写）。

    参数：
    query (str): 搜索关键词

    返回：
    list: 匹配的物品记录列表，每个记录包含 (id, image, name, location, note)
    """
    conn = sqlite3.connect('lost_and_found.db')
    cursor = conn.cursor()
    cursor.execute(
        "SELECT id, image, name, location, note FROM items WHERE LOWER(name) LIKE LOWER(?) OR LOWER(note) LIKE LOWER(?)",
        ('%' + query + '%', '%' + query + '%'))
    results = cursor.fetchall()
    conn.close()
    return results


def get_all_items():
    """
    获取所有物品

    查询数据库中所有的物品记录。

    返回：
    list: 所有物品记录的列表，每个记录包含 (id, image, name, location, note)
    """
    conn = sqlite3.connect('lost_and_found.db')
    cursor = conn.cursor()
    cursor.execute("SELECT id, image, name, location, note FROM items")
    results = cursor.fetchall()
    conn.close()
    return results


def delete_item(item_id):
    """
    删除物品

    根据物品 ID 从数据库中删除对应的记录。

    参数：
    item_id (int): 要删除的物品 ID
    """
    conn = sqlite3.connect('lost_and_found.db')
    cursor = conn.cursor()
    cursor.execute("DELETE FROM items WHERE id = ?", (item_id,))
    conn.commit()
    conn.close()


def item_exists(item_id):
    """
    检查物品是否存在

    根据物品 ID 查询数据库，判断该物品是否已存在。

    参数：
    item_id (int): 要检查的物品 ID

    返回：
    bool: 如果物品存在返回 True，否则返回 False
    """
    conn = sqlite3.connect('lost_and_found.db')
    cursor = conn.cursor()
    cursor.execute("SELECT name FROM items WHERE id = ?", (item_id,))
    result = cursor.fetchone()
    conn.close()
    return result is not None

if __name__ == '__main__':
    # 示例代码
    init_db()
    print(len(get_all_items()))
    delete_item(1)
    print(len(get_all_items()))